<?php 

/**
 * Joomla! 1.5 component arts_curriculum
 * @package    arts_curriculum
 * @subpackage
 * @author     Chris Borkowski {@link http://www.guggenheim.org}
 * @author     Created on 31-August-2009
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.model');

  	class Arts_curriculumModelCategory extends JModel
  	{
		/**
		* Category id
		*
		* @var int
		*/
		var $_id = null;
		/**
		* Category ata array
		*
		* @var array
		*/
		var $_data = null;
		/**
		* Category total
		*
		* @var integer
		*/
		var $_total = null;
		/**
		* Category data
		*
		* @var object
		*/
		var $_category = null;
		/**
		* Pagination object
		*
		* @var object
		*/
		var $_pagination = null;
		/**
		* Constructor
		*
		* @since 1.5
		*/
			
		function __construct()
		{	
			parent::__construct();
			global $mainframe;
			$config = JFactory::getConfig();
			
			// Get the pagination request variables
			$this->setState('limit', $mainframe->getUserStateFromRequest('com_arts_curriculum.limit', 'limit', $config->getValue('config.list_limit'), 'int'));
			$this->setState('limitstart', JRequest::getVar('limitstart', 0, '', 'int'));
			
			// In case limit has been changed, adjust limitstart accordingly
			$this->setState('limitstart', ($this->getState('limit') != 0 ? (floor($this->getState('limitstart') / $this->getState('limit')) * $this->getState('limit')) : 0));
			
			// Get the filter request variables
			$this->setState('filter_order', JRequest::getCmd('filter_order', 'ordering'));
			$this->setState('filter_order_dir', JRequest::getCmd('filter_order_Dir', 'ASC'));
			$id = JRequest::getVar('id', 0, '', 'int');
			$this->setId((int)$id);
		}
		
			/**
			* Method to set the category id
			*
			* @access public
			* @param int category ID number
			*/
		
			function setId($id)
			{
			// Set category ID and wipe data
			$this->_id = $id;
			$this->_category = null;
			}
			
			
			/**
			* Method to get item item data for the category
			*
			* @access public
			* @return array
			*/
			
			function getData()
			{
			
			// Lets load the content if it doesn't already exist
			if (empty($this->_data))
			{
			
			$query = $this->_buildQuery();
			$this->_data = $this->_getList($query, $this->getState('limitstart'), $this->getState('limit'));
			$total = count($this->_data);
			
			for($i = 0; $i < $total; $i++)
			{
			$item =& $this->_data[$i];
			$item->slug = $item->id.':'.$item->alias;
			}
			}
			return $this->_data;
			}
			
			
			/**
			* Method to get the total number of item items for the category
			*
			* @access public
			* @return integer
			*/
			
			function getTotal()
			{
			
			// Lets load the content if it doesn't already exist
			if (empty($this->_total))
			{
			$query = $this->_buildQuery();
			$this->_total = $this->_getListCount($query);
			}
			return $this->_total;
			}
			
			
			/**
			* Method to get a pagination object of the item items for the category
			*
			* @access public
			* @return integer
			*/
			
			function getPagination()
			{
			
			// Lets load the content if it doesn't already exist
			if (empty($this->_pagination))
			{
			jimport('joomla.html.pagination');
			$this->_pagination = new JPagination( $this->getTotal(), $this->getState('limitstart'), $this->getState('limit') );
			}
			return $this->_pagination;
			}
			
			
			/**
			* Method to get category data for the current category
			*
			* @since 1.5
			*/
			
			function getCategory()
			{
			
			// Load the Category data
			if ($this->_loadCategory())
			{
			
			// Initialize some variables
			$user = &JFactory::getUser();
			// Make sure the category is published
			//if (!$this->_category->published) {
			//JError::raiseError(404, JText::_("Resource Not Found"));
			//return false;
			//}
			// check whether category access level allows access
			
			if ($this->_category->access > $user->get('aid', 0)) {
			JError::raiseError(403, JText::_("ALERTNOTAUTH"));
			return false;
			}
			
			}
			return $this->_category;
			}
			
			
			/**
			* Method to load category data if it doesn't exist.
			*
			* @access private
			* @return boolean True on success
			*/
			
			function _loadCategory()
			{
			if (empty($this->_category))
			{
			
			// OLD current category info
// 			$query = 'SELECT c.*, ' .
// 			' CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(\':\', c.id, c.alias) ELSE c.id END as slug '.
// 			' FROM #__categories AS c' .
// 			' WHERE c.id = '. (int) $this->_id .
// 			' AND c.section = "com_arts_curriculum"';
			
			// current category info
			$query = 'SELECT c.*, c.id as slug, '.
			' v.main_body as v_main_body, v.additional_resources as v_add, v.pdf as v_pdf'.
			' FROM #__categories AS c' .
			' LEFT JOIN #__arts_curriculum_vocab as v ON v.catid = c.id'.
			' WHERE c.id = '. (int) $this->_id .
			' AND c.section = "com_arts_curriculum"';
			
			$this->_db->setQuery($query, 0, 1);
			$this->_category = $this->_db->loadObject();
			}
			return true;
			
			}
			
			
			
			function _buildQuery()
			{
			
			$filter_order = $this->getState('filter_order');
			$filter_order_dir = $this->getState('filter_order_dir');
			$filter_order = JFilterInput::clean($filter_order, 'cmd');
			$filter_order_dir = JFilterInput::clean($filter_order_dir, 'word');
			
			// We need to get a list of all items in the given category
			$query = 'SELECT *' .
			' FROM #__arts_curriculum' .
			' WHERE catid = '. (int) $this->_id.
			' AND published = 1' .
			//' AND archived = 0'.
			' ORDER BY '. $filter_order .' '. $filter_order_dir .', ordering';
			
			return $query;
			}

}